package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.GfjfjtEntryInfo;
import com.ruoyi.basebill.DTO.GfjfjtInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzGfjfjtentry;
import com.ruoyi.basebill.mapper.WfzGfjfjtMapper;
import com.ruoyi.basebill.domain.WfzGfjfjt;
import com.ruoyi.basebill.service.IWfzGfjfjtService;

/**
 * 工会经费计提Service业务层处理
 * 
 * @author xiefeng
 * @date 2022-12-19
 */
@Service
public class WfzGfjfjtServiceImpl implements IWfzGfjfjtService 
{
    @Autowired
    private WfzGfjfjtMapper wfzGfjfjtMapper;

    /**
     * 查询工会经费计提
     * 
     * @param fid 工会经费计提主键
     * @return 工会经费计提
     */
    @Override
    public WfzGfjfjt selectWfzGfjfjtByFid(Long fid)
    {
        return wfzGfjfjtMapper.selectWfzGfjfjtByFid(fid);
    }

    /**
     * 查询工会经费计提列表
     * 
     * @param wfzGfjfjt 工会经费计提
     * @return 工会经费计提
     */
    @Override
    public List<WfzGfjfjt> selectWfzGfjfjtList(WfzGfjfjt wfzGfjfjt)
    {
        return wfzGfjfjtMapper.selectWfzGfjfjtList(wfzGfjfjt);
    }

    /**
     * 新增工会经费计提
     * 
     * @param wfzGfjfjt 工会经费计提
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzGfjfjt(WfzGfjfjt wfzGfjfjt)
    {
        int rows = wfzGfjfjtMapper.insertWfzGfjfjt(wfzGfjfjt);
        insertWfzGfjfjtentry(wfzGfjfjt);
        return rows;
    }

    /**
     * 修改工会经费计提
     * 
     * @param wfzGfjfjt 工会经费计提
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzGfjfjt(WfzGfjfjt wfzGfjfjt)
    {
        wfzGfjfjtMapper.deleteWfzGfjfjtentryByFparentid(wfzGfjfjt.getFid());
        insertWfzGfjfjtentry(wfzGfjfjt);
        return wfzGfjfjtMapper.updateWfzGfjfjt(wfzGfjfjt);
    }

    /**
     * 批量删除工会经费计提
     * 
     * @param fids 需要删除的工会经费计提主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzGfjfjtByFids(Long[] fids)
    {
        wfzGfjfjtMapper.deleteWfzGfjfjtentryByFparentids(fids);
        return wfzGfjfjtMapper.deleteWfzGfjfjtByFids(fids);
    }

    /**
     * 删除工会经费计提信息
     * 
     * @param fid 工会经费计提主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzGfjfjtByFid(Long fid)
    {
        wfzGfjfjtMapper.deleteWfzGfjfjtentryByFparentid(fid);
        return wfzGfjfjtMapper.deleteWfzGfjfjtByFid(fid);
    }

    /**
     * 新增工会经费计提分录信息
     * 
     * @param wfzGfjfjt 工会经费计提对象
     */
    public void insertWfzGfjfjtentry(WfzGfjfjt wfzGfjfjt)
    {
        List<WfzGfjfjtentry> wfzGfjfjtentryList = wfzGfjfjt.getWfzGfjfjtentryList();
        Long fid = wfzGfjfjt.getFid();
        if (StringUtils.isNotNull(wfzGfjfjtentryList))
        {
            List<WfzGfjfjtentry> list = new ArrayList<WfzGfjfjtentry>();
            for (WfzGfjfjtentry wfzGfjfjtentry : wfzGfjfjtentryList)
            {
                wfzGfjfjtentry.setFparentid(fid);
                list.add(wfzGfjfjtentry);
            }
            if (list.size() > 0)
            {
                wfzGfjfjtMapper.batchWfzGfjfjtentry(list);
            }
        }
    }



    /**
     *
     * @param wfzGfjfjt 导入工会经费
     * @return
     */
    @Override
    public String importGfjfjt(WfzGfjfjt wfzGfjfjt) {
        GfjfjtInfo gfjfjtInfo = new GfjfjtInfo();
        String fnumber = wfzGfjfjt.getFnumber();//单据编号
        String fcompany = wfzGfjfjt.getFcompany();//公司（组织）
        String fperiod = wfzGfjfjt.getFperiod();//薪酬期间
        String fvourtype = wfzGfjfjt.getFvourtype();//凭证字

        gfjfjtInfo.setNumber(fnumber);
        gfjfjtInfo.setCompany(fcompany);
        gfjfjtInfo.setPeriod(fperiod);
        gfjfjtInfo.setVourType(fvourtype);
        gfjfjtInfo.setSourcebillid(String.valueOf(wfzGfjfjt.getFid()));

        List<WfzGfjfjtentry> wfzGfjfjtentryList = wfzGfjfjt.getWfzGfjfjtentryList();
        ArrayList<GfjfjtEntryInfo> Entry = new ArrayList<>();
        //组装分录数据
        for (int i = 0; i < wfzGfjfjtentryList.size(); i++) {
            WfzGfjfjtentry wfzGfjfjtentry = wfzGfjfjtentryList.get(i);
            String fcostnumber = wfzGfjfjtentry.getFcostnumber();//成本中心
            BigDecimal fyfgz = wfzGfjfjtentry.getFyfgz();//应付工资合计
            BigDecimal fgfjf = wfzGfjfjtentry.getFgfjf();//公费经费
            BigDecimal fjrfl = wfzGfjfjtentry.getFjrfl();//节日福利
            BigDecimal fgwbn = wfzGfjfjtentry.getFgwbn();//高温保暖
            BigDecimal fcbfy = wfzGfjfjtentry.getFcbfy();//餐补费
            BigDecimal ffhbfl = wfzGfjfjtentry.getFfhbfl();//非货币福利
            String fcostcompany = wfzGfjfjtentry.getFcostcompany();//成本中心所属财务组织
            String fjzcompany = wfzGfjfjtentry.getFjzcompany();//记账公司
            String fjsfs = wfzGfjfjtentry.getFjsfs();//组织间结算方式
            String fcbzxxz = wfzGfjfjtentry.getFcbzxxz();//成本中心属性
            String fvourtype1 = wfzGfjfjtentry.getFvourtype();//凭证字

            GfjfjtEntryInfo gfjfjtEntryInfo = new GfjfjtEntryInfo();
            gfjfjtEntryInfo.setCostCenter(fcostnumber);
            gfjfjtEntryInfo.setYfgz(fyfgz);
            gfjfjtEntryInfo.setGfjf(fgfjf);
            gfjfjtEntryInfo.setJrfl(fjrfl);
            gfjfjtEntryInfo.setGwbn(fgwbn);
            gfjfjtEntryInfo.setCbfy(fcbfy);
            gfjfjtEntryInfo.setFhbfl(ffhbfl);
            gfjfjtEntryInfo.setCostcompany(fcostcompany);
            gfjfjtEntryInfo.setJzcompany(fjzcompany);
            gfjfjtEntryInfo.setJsfs(fjsfs);
            gfjfjtEntryInfo.setCbzxxz(fcbzxxz);
            gfjfjtEntryInfo.setVourType(fvourtype1);

            Entry.add(gfjfjtEntryInfo);

        }
        gfjfjtInfo.setEntry(Entry);

        //转为Json
        String json = JSONObject.toJSONString(gfjfjtInfo);

        return json;
    }
}
